package com.xsq.wifi.utils;

import static com.arthenica.mobileffmpeg.Config.RETURN_CODE_SUCCESS;

import com.arthenica.mobileffmpeg.FFmpeg;

import java.io.File;

/**
 * 编写人：李振德
 * 创建时间：2025/6/9
 */
public class VideoConverter {
    public interface Callback {
        void onSuccess(File outputFile); // 返回转换后的AVI文件
        void onFailure(String error);
    }

    /**
     * 转码视频为256x256的AVI格式
     * @param inputFile  输入视频文件（如MP4）
     * @param outputDir  输出目录
     * @param callback   结果回调
     */
    public static void convertToAVI(File inputFile, File outputDir, Callback callback) {
        new Thread(() -> {
            try {
                // 输出文件路径（AVI格式）
                String outputPath = new File(outputDir, "converted_" + System.currentTimeMillis() + ".avi").getAbsolutePath();

                // FFmpeg命令：
                // 1. 强制缩放为256x256（保持宽高比，不足部分填充黑边）
                // 2. 转码为AVI容器 + MJPEG编码（设备兼容性更好）
                String cmd = "-y -i " + inputFile.getAbsolutePath() +
                        " -vf \"scale=256:256:force_original_aspect_ratio=decrease,pad=256:256:(ow-iw)/2:(oh-ih)/2\" " +
                        " -c:v mjpeg -q:v 3 " +  // MJPEG编码，质量因子3（1-31，越小质量越高）
                        " -c:a pcm_s16le " +     // AVI常用的未压缩音频格式
                        " -f avi " +             // 强制输出为AVI容器
                        outputPath;

                // 执行FFmpeg命令
                int result = FFmpeg.execute(cmd);
                if (result == RETURN_CODE_SUCCESS) {
                    callback.onSuccess(new File(outputPath));
                } else {
                    callback.onFailure("FFmpeg error: ");
                }
            } catch (Exception e) {
                callback.onFailure(e.getMessage());
            }
        }).start();
    }
}
